package com.tong.hao.batch.step.test;

import lombok.extern.slf4j.Slf4j;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * @ClassName StringProcessor
 * @Author 友野浩二
 * @Description Step第二步: 数据处理阶段ItemProcessor
 * @Version 1.0
 *
 * <pre>
 *      读取数据后,返回的数据会流到ItemProcessor进行处理。同样,ItemProcessor是一个接口,要实现自己的处理逻辑,实现此接口即可。
 *      ItemProcessor接口泛型: I和O,【I是读阶段获取的数据,O是提交给写阶段的数据】
 *      当然,如果没有ItemProcessor,读取到的数据直接就到ItemWriter流程也是可以的。
 * 【注意】: Spring Batch有一个chunk的概念,用于多次读,直到chunk读取到指定数量的数据后,再统一给到processor和writer,以提高效率。
 * </pre>
 */
@Slf4j
public class StringProcessor implements ItemProcessor<String, String> {

    @Autowired
    private StringService stringService;

    @Override
    public String process(String s) throws Exception {
        String dataProcessed = this.stringService.convert2UpperCase(s);
        log.info("process data --> " + dataProcessed);
        return dataProcessed;
    }
}
